////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "File.hpp"

#include <algorithm>

namespace smeg
{
	namespace tools
	{

////////////////////////////////////////////////////////////
/// Default constructor
////////////////////////////////////////////////////////////
File::File( const std::string& _Name ) :
m_Name( _Name )
{
    std::replace( m_Name.begin(), m_Name.end(), '/', '\\' );
}


////////////////////////////////////////////////////////////
/// Constructor with const char* Name
////////////////////////////////////////////////////////////
File::File( const char* _Name ) :
m_Name( _Name )
{
    std::replace( m_Name.begin(), m_Name.end(), '/', '\\' );
}


////////////////////////////////////////////////////////////
/// Does the file exists or not
////////////////////////////////////////////////////////////
bool File::Exists() const
{
	std::ifstream File( m_Name.c_str() );

    return File.is_open();
}


////////////////////////////////////////////////////////////
/// Get the full filename
////////////////////////////////////////////////////////////
const std::string& File::Fullname() const
{
    return m_Name;
}


////////////////////////////////////////////////////////////
/// Get the filename
////////////////////////////////////////////////////////////
std::string File::Filename() const
{
    std::string::size_type Pos = m_Name.find_last_of( "\\/" );

    if ( Pos != std::string::npos ) {
        return m_Name.substr( Pos + 1, std::string::npos );
    } else {
        return m_Name;
    }
}


////////////////////////////////////////////////////////////
/// Get the filename without extension
////////////////////////////////////////////////////////////
std::string File::ShortFilename() const
{
    return Filename().substr( 0, Filename().find_last_of( "." ) );
}


////////////////////////////////////////////////////////////
/// Get the filename without extension
////////////////////////////////////////////////////////////
std::string File::Extension() const
{
    std::string::size_type Pos = m_Name.find_last_of( "." );

    if ( Pos != std::string::npos ) {
        return m_Name.substr( Pos + 1, std::string::npos );
    } else {
        return "";
    }
}

    } // namespace tools
} // namespace smeg
